#define  _CRT_SECURE_NO_WARNINGS 1
//#include"head.h"


//void memcpy(void* dst, void* src, int size);
//void memcpy(void* destination, void* source, size_t num);
//                 目标地址          源地址      拷贝的字节数
//不在乎存放的是什么类型的数据，只需要知道地址和字节数，可以拷贝任意类型的数据


//int main()
//{
//	int arr1[] = { 1,2,3,4,5 };
//	int arr2[10] = { 0 };
//    memcpy(arr2, arr1, sizeof(arr1));
//    for (int i = 0; i < 5; i++)
//    {
//        printf("%d ", arr2[i]);
//    }
//
//	return 0;
//}


//模拟实现

//void* my_memcpy(void* dst, void* src, size_t num)
//{
//    assert(dst != NULL && src != NULL);
//    //void* 指针不能直接运算，要强制类型转换 --> 强制类型转换是临时的，不会彻底改变类型
//    //转换成char*，一次只操作一个字节
//    void* ret = dst;
//    while (num--)
//    {
//        *(char*)dst = *(char*)src;
//        src = (char*)src + 1;
//        dst = (char*)dst + 1;
//    }
//    return ret;
//}
//
//void print_arr(int arr[], size_t size)
//{
//    for (int i = 0; i < size; i++)
//    {
//        printf("%d ", arr[i]);
//    }
//    printf("\n");
//}
//
//int main()
//{
//    int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
//    int arr2[10] = { 0 };
//    int sz2 = sizeof(arr2) / sizeof(arr2[0]);
//    my_memcpy(arr2, arr1, sizeof(arr1));
//    print_arr(arr2, sz2);
//
//    my_memcpy(arr2+2, arr2, 20);
//    //应该是：1 2 1 2 3 4 5 8 9 10
//    //memcpy函数处理的是不重叠的两块内存数据的拷贝
//    //重叠内存的拷贝使用memmove函数
//    print_arr(arr2, sz2);
//
//    return 0;
//}

